Simultaneously accessing file objects through Web services and file services

ABSTRACT

Accessing data file objects includes providing a file system interface on a client, where the file system interface allows an application running on the client to make file system calls to access the data file objects. A Web Services interface may also be provided on the client, where the Web Services interface allows an application to access file objects using the Web Services at the same time that file objects are being accessed through the file system interface. The Web Services interface may be a SOAP interface and/or a REST interface. Accessing data file objects may also include providing a direct file object interface on the client, where the direct file object interface allows an application to directly access file objects at the same time that file objects are being accessed using the Web Services interface and using the file system interface.

BACKGROUND OF THE INVENTION

1. Technical Field

This application relates to the field of storing data, and moreparticularly to the field of data storage services in a scalable highcapacity system.

2. Description of Related Art

It has been estimated that the amount of digital information created,captured, and replicated in 2006 was 161 exabytes or 161 billiongigabytes, which is about three million times the information in all thebooks ever written. It is predicted that between 2006 and 2010, theinformation added annually to the digital universe will increase morethan six fold from 161 exabytes to 988 exabytes. The type of informationresponsible for this massive growth is rich digital media andunstructured business content. There is also an ongoing conversion fromanalog to digital formats—film to digital image capture, analog todigital voice, and analog to digital TV.

The rich digital media and unstructured business content have uniquecharacteristics and storage requirements that are different thanstructured data types (e.g. database records), for which many of today'sstorage systems were specially designed. Many conventional storagesystems are highly optimized to deliver high performance I/O for smallchunks of data. Furthermore, these systems were designed to supportgigabyte and terabyte sized information stores.

In contrast, rich digital media and unstructured business content havegreater capacity requirements (petabyte versus gigabyte/terabyte sizedsystems), less predictable growth and access patterns, large file sizes,billions and billions of objects, high throughput requirements, singlewriter, multiple reader access patterns, and a need for multi-platformaccessibility. Conventional storage systems have met these needs in partby using specialized hardware platforms to achieve required levels ofperformance and reliability. Unfortunately, the use of specializedhardware results in higher customer prices and may not support volumeeconomics as the capacity demands grow large—a differentiatingcharacteristic of rich digital media and unstructured business content.

Some of the cost issues have been addressed with tiered storage, whichattempts to reduce the capital and operational costs associated withkeeping all information on a single high-cost storage tier. However,tiered storage comes with a complex set of decisions surroundingtechnology, data durability, functionality and even storage vendor.Tiered storage solutions may introduce unrelated platforms,technologies, and software titles having non-zero operational costs andmanagement requirements that become strained as the quantity of dataincreases.

In addition, tiered storage may cause a data replica incoherence whichresults in multiple, disjoint copies of information existing across thetiers of storage. For example, storage management software handling databackup and recovery may make multiple copies of information sets on eachstorage tier (e.g. snapshots, backup sets, etc). Information Life-cycleManagement (ILM) software dealing with information migration from onetier to another may create additional and often overlapping copies ofthe data. Replication software may make an extra copy of the informationset within a particular tier in order to increase performance toaccessing applications. Each of these functions typically runsautonomously from one another. The software may be unable to realizeand/or take advantage of the multiple replicas of the same informationset.

In addition, for large scale unstructured information stores, it may bedifficult to maintain a system and manage the environment as componentsfail. For example, a two petabyte information store may be comprised ofeight thousand 250-gigabyte disk drives. Disk failures should be handledin a different manner in a system of this scale so that the systemcontinues to operate relatively smoothly whenever one or only a few ofthe disk drives fail.

Thus, it would be desirable to provide a storage system that addressesdifficulties associated with high-cost specialized hardware, storagetiering, and failure management.

SUMMARY OF THE INVENTION

According to the system described herein, accessing data file objectsincludes providing a file system interface on at least one client, wherethe file system interface allows an application running on the at leastone client to make file system calls to access the data file objects andproviding a Web Services interface on the at least one client, where theWeb interface allows an application to access file objects using the Webat the same time that file objects are being accessed through the filesystem interface. The Web Services interface may be a SOAP interfaceand/or a REST interface. Accessing data file objects may also includeproviding a direct file object interface on the at least one client,where the direct file object interface allows an application to directlyaccess file objects at the same time that file objects are beingaccessed using the Web Services interface and using the file systeminterface. Accessing data file objects may also include providing filename services that translate file names into file object identifiers,where the file name services are accessed by the file system interfaceand/or the Web Services interface. Providing the file system interfacemay include providing a virtual file system in a kernel address space ofthe at least one client. Accessing data file objects may also includeproviding a layout manager that manages file objects. The layout managermay be provided in the kernel address space of the at least one client.The layout manager is provided in user address space of the at least oneclient. The virtual file system may access the layout manager using abridge between kernel memory address space and user memory addressspace.

According further to the system described herein, a client that accessesa plurality of file objects includes a file system interface that allowsan application running on the at least one client to make file systemcalls to access the data file objects, a Web Services interface thatallows an application to access file objects using the Web at the sametime that file objects are being accessed through the file systeminterface, and a communication interface, coupled to the file systeminterface and to the Web Services interface, that exchanges file objectdata between the client and a plurality of servers containing the fileobjects. The client may also include a direct file object interface thatallows an application to directly access file objects at the same timethat file objects are being accessed using the Web Services interfaceand using the file system interface. The client may also include a filename service that translates file names into file object identifiers,where the file name service is accessed by the file system interfaceand/or the Web Services interface. The file system interface may includea virtual file system in a kernel address space of the at least oneclient. The client may also include a layout manager that manages fileobjects. The layout manager may be provided in the kernel address spaceof the at least one client. The layout manager may be provided in useraddress space of the at least one client. The virtual file system mayaccess the layout manager using a bridge between kernel memory addressspace and user memory address space.

According further to the system described herein, computer software,provided in a computer-readable storage medium, includes executable codethat allows an application running on at least one client to make filesystem calls to access the data file objects and includes executablecode that allows an application to access file objects using the Web atthe same time that file objects are being accessed through the filesystem interface. The computer software may also include executable codethat allows an application to directly access file objects at the sametime that file objects are being accessed using the Web and using filesystem calls. The computer software may also include executable codethat translates file names into file object identifiers.

According further to the present invention, a system simultaneouslyallows accessing a plurality of file objects using a file systeminterface and a Web Services interface. The system includes a pluralityof servers that contain the file objects and at least one client,coupled to the servers. The client includes a file system interface thatallows an application running on the at least one client to make filesystem calls to access the data file objects, a Web Services interfacethat allows an application to access file objects using the Web at thesame time that file objects are being accessed through the file systeminterface, and a communication interface, coupled to the file systeminterface and the Web Services interface, that exchanges file objectdata between the client and a plurality of servers containing the fileobjects. The file system interface may include a virtual file system ina kernel address space of the client.

According further to the system described herein, managing objects for adata file includes obtaining a metadata object for the file, determiningif the metadata object indicates that a portion of the data fileincludes synchronous mirrors, and, in response to a write of new data tothe data file, writing the new data to each synchronous mirror. Dataobjects of a data file may be in one of four states: current, stale,empty, and immutable. In response to a read operation and thecorresponding data object being in a stale state, data may be read for acorresponding synchronous mirror that is in a current state.

BRIEF DESCRIPTION OF DRAWINGS

FIG. 1 is a diagram illustrating servers and clients according to anembodiment of the system described herein.

FIGS. 2A and 2B are diagrams illustrating a client coupled to serversand to other network(s) according to an embodiment of the systemdescribed herein.

FIG. 3 is a diagram illustrating a client having server operationssoftware, client software, and a plurality of interfaces therebetweenaccording to an embodiment of the system described herein.

FIG. 4 is a diagram illustrating a file having a metadata file objectand a plurality of data file objects according to an embodiment of thesystem described herein.

FIG. 5 is a diagram illustrating a metadata file object for a fileaccording to an embodiment of the system described herein.

FIG. 6 is a diagram illustrating an example of a layout storage objecttree for a file according to an embodiment of the system describedherein.

FIG. 7 is a diagram illustrating an example of a layout storage objecttree with multiple maps for a file according to an embodiment of thesystem described herein.

FIG. 8 is a diagram illustrating another example of a layout storageobject tree with multiple maps and replication nodes for a fileaccording to an embodiment of the system described herein.

FIG. 9 is a flowchart illustrating a client obtaining a lease for andoperating on a file according to an embodiment of the system describedherein.

FIG. 10 is a flowchart illustrating a client reading data from a fileaccording to an embodiment of the system described herein.

FIG. 11 is a flowchart illustrating a client writing data to a fileaccording to an embodiment of the system described herein.

FIG. 12 is a flowchart illustrating steps performed by a client inconnection with finding an alternative copy of data according to anembodiment of the system described herein.

FIG. 13 is a flowchart illustrating a client writing to synchronousmirrors for data according to an embodiment of the system describedherein.

FIG. 14 is a flow chart illustrating a client converting file names toobject identifiers according to an embodiment of the system describedherein.

FIG. 15 is a diagram illustrating a client having an application in usermemory address space and a having a VFS, file name services, kernel I/Odrivers, layout manager, and a communication interface in kernel memoryaddress space according to an embodiment of the system described herein.

FIG. 16 is a flow chart illustrating operation of a VFS at a clientaccording to an embodiment of the system described herein.

FIG. 17 is a diagram illustrating a client having an application, filename services, user level I/O drivers, and a layout manager in usermemory address space and having a communication interface in kernelmemory address space according to an embodiment of the system describedherein.

FIG. 18 is a diagram illustrating a client having an application, a filepresentation layer, user level I/O drivers, and a layout manager in usermemory address space and having a VFS and communication interface and akernel memory address space to user memory address space bridge inkernel memory address space according to an embodiment of the systemdescribed herein.

FIG. 19 is a diagram illustrating a client having an application in usermemory address space and having file name services, kernel I/O drivers,a layout manager, and a communication interface in kernel address spaceaccording to an embodiment of the system described herein.

FIG. 20 is a diagram illustrating a client having an application, filename services, user level I/O drivers, and a layout manager in usermemory address space and having a communication interface in kernelmemory address space according to an embodiment of the system describedherein.

FIG. 21 is a diagram illustrating a client having an application, filename services, user level I/O drivers, and a layout manager in usermemory address space and having a communication interface and a kernelmemory address space to user memory address space bridge in kernelmemory address space according to an embodiment of the system describedherein.

FIG. 22 is a diagram illustrating a client having an application in usermemory address space and having a Web Services module, kernel I/Odrivers, a layout manager, and a communication interface in kernelmemory address space according to an embodiment of the system describedherein.

FIG. 23 is a diagram illustrating a client having an application, a WebServices layer, user level I/O drivers, and a layout manager in usermemory address space and having a communication interface in kernelmemory address space according to an embodiment of the system describedherein.

FIG. 24 is a diagram illustrating a client having an application, a WebServices layer, user level I/O drivers, and a layout manager in usermemory address space and having a communication interface and a kernelmemory address space to user memory address space bridge in kernelmemory address space according to an embodiment of the system describedherein.

FIG. 25 is a diagram illustrating a client having a plurality ofapplications, a Web Services layer, file name services, user level I/Odrivers, and a layout manager in user memory address space and having aVFS, a communication interface and a kernel memory address space to usermemory address space bridge in kernel memory address space according toan embodiment of the system described herein.

DETAILED DESCRIPTION OF VARIOUS EMBODIMENTS

Referring to FIG. 1, a diagram illustrates servers 102 coupled to aplurality of clients 104-106. Each of the clients 104-106 represents oneor more processing devices that receives file services from the servers102. Each of the clients 104-106 may or may not be independent of otherones of the clients 104-106. One or more of the clients 104-106 may be amultiprocessing/multiuser system and possibly have multiple independentusers. The clients 104-106 are meant to represent any number of clients.

The file services provided by the servers 102 may include data storageand retrieval as well as related operations, such as data mirroring,cloning, etc. The servers 102 may be implemented using a plurality ofservices (and/or interconnected file servers including SAN components)that are provided by interconnected processing and/or storage devices.In an embodiment herein, each of the clients 104-106 may be coupled tothe servers 102 using the Web, possibly in conjunction with local TCP/IPconnections. However, it is possible for one or more of the clients104-106 to be coupled to the servers 102 using any other appropriatecommunication mechanism and/or combinations thereof to provide thefunctionality described herein.

Referring to FIG. 2A, the client 104 is shown as being coupled to theservers 102 and to one or more other network(s). The other network(s)may include a local area network (LAN). Thus, the client 104 may be agateway between the servers 102 and a LAN to which one or more otherdevices (not shown) may also be coupled. The client 104 may act as alocal file server to the one or more other devices coupled to the LAN byproviding data from the servers 102 to the one or more other devices. Ofcourse, it is possible for one or more other clients to simultaneous actas gateways to the same or different other network(s). Generally, forthe discussion herein, reference to a particular one of the clients104-106 may be understood to include reference to any or all of theclients 104-106 coupled to the servers 102 unless otherwise indicated.

Referring to FIG. 2B, a diagram shows the client 104 being coupled tothe servers 102 and one or more other network(s) (e.g., a LAN) in aconfiguration that is different from that shown in FIG. 2A. In theconfiguration of FIG. 2B, a router 108 is coupled between the servers102 and the client 104. The router 108 may be any conventional routerthat may be accessed by the client 104. In the configuration of FIG. 2B,the client 104 uses only a single connection point to both the servers102 and to the other network(s). In the configuration of FIG. 2B, theclient 104 may act as local file server and gateway between the servers102 and one or more other devices (not shown) coupled to the othernetwork(s). Of course, any other appropriate connection configurationsmay be used by any of the client 104-106 coupled to the servers 102and/or to other network(s).

Referring to FIG. 3, the client 104 is shown in more detail havingserver operations software 122, client software 124, and an interfacelayer 125 that includes a plurality of interfaces 126-128 between theserver operations software 122 and the client software 124. The serveroperations software 122 facilitates the exchange of information/databetween the client 104 and the servers 102 to provide the functionalitydescribed herein. The server operations software 122 is described inmore detail elsewhere herein. The client software 124 represents anysoftware that may be run on the client 104, including applicationsoftware, operating system software, Web server software, etc., that isnot part of the server operations software 122 or the interface layer125. As described in more detail elsewhere herein, it is possible tohave the client software 124 interact with the servers 102 throughdifferent ones of the interfaces 126-128 at the same time.

The file services described herein may be implemented by the servers 102using a set of file objects where a file that is accessed by the clientsoftware includes a metadata file object which points to one or moredata file objects that contain the data for the file. Accessing the filewould involve first accessing the metadata file object to locate thecorresponding data file objects for the file. Doing this is described inmore detail elsewhere herein. Note, however, that any appropriate fileobject mechanism may be used for the system described herein.

Referring to FIG. 4, a file 130 is shown as including a metadata fileobject 132 and a plurality of data file objects. The metadata fileobject 132 contains information that points to each of the data fileobjects 134-136. Accessing the file includes first accessing themetadata file object 132 and then using information therein to locatethe appropriate one or more of the corresponding data file object134-136.

Referring to FIG. 5, the metadata file object 132 is shown in moredetail as including an object attributes section 142 and a LayoutStorage Object (LSO) tree section 144. The object attributes sectioncontains conventional file-type attributes such as owner id, group id,access control list, last modification time, last access time, lastchange time, creation time, file size, and link count. Many of theattributes are self-explanatory. The last modification time correspondsto the last time that the data for the data objects 134-136 had beenmodified while the last change time corresponds to when the objectmetadata had last been changed. The link count indicates the number ofother objects that reference a particular file (e.g., aliases that pointto the same file). In an embodiment herein, a file and its relatedobjects are deleted when the link count is decremented to zero.

The LSO tree section 144 includes a data structure that includes one ormore maps for mapping the logical space of the file to particular datafile objects. The LSO tree section 144 may also indicate any mirrors forthe data and whether the mirrors are synchronous or asynchronous. LSOtrees and mirrors are described in more detail elsewhere herein.

Referring to FIG. 6, a simple LSO tree 160 is shown as including an LSOroot node 162 and a single map 164. The LSO root node 162 is used toidentify the LSO tree 160 and includes links to one or more map(s) usedin connection with the file corresponding to the LSO tree 160. The map164 maps logical locations within the file to actual data storagelocation. A process that accesses logical storage space of a filerepresented by the LSO tree 160 first uses the LSO root node 162 to findthe map 164 and then uses the map 164 to translate logical addresseswithin the file to an actual data storage locations.

Referring to FIG. 7, an LSO tree 170 is shown as including an LSO rootnode 172 and a plurality of maps 174-176. Each of the maps 174-176 mayrepresent a different range of logical offsets within the filecorresponding to the LSO tree 170. For example, the map 174 maycorrespond to a first range of logical offsets in the file. The map 174may map logical locations in the first range to a first actual storagedevice. The map 175 may correspond to a second range of logical offsetsin the file, different than the first range, which may be mapped to adifferent actual storage device or may be mapped to the same actualstorage device as the map 174. Similarly, the map 176 may correspond toa third range of logical offsets in the file, different than the firstrange and the second range, which may be mapped to a different actualstorage device or may be mapped to the same actual storage device as themap 174 and/or the map 175.

Referring to FIG. 8, an LSO tree 180 is shown as including an LSO rootnode 181 and a pair of replication nodes 182 a, 182 b, which indicatethat the underlying data is to be mirrored (replicated) and whichindicate whether the mirror is synchronous or asynchronous. Synchronousand asynchronous mirrors are discussed in more detail elsewhere herein.The node 182 a has a plurality of children maps 183-185 associatedtherewith while the node 182 b has a plurality of children maps 186-188associated therewith. The replication nodes 182 a, 182 b indicate thatthe data corresponding to the maps 183-185 is a mirror of datacorresponding to the maps 186-188. In some embodiments, the nodes 182 a,182 b may be implemented using a single node 189 to indicatereplication.

A process accessing a file having the LSO tree 180 would traverse thetree 180 and determine that data is mirrored. As discussed in moredetail elsewhere herein, depending upon the type of mirroring, theprocess accessing the LSO tree 180 would either write the data to thechildren of both of the nodes 182 a, 182 b or would provide a message toanother process/server (e.g., the servers 102) that would perform theasynchronous mirroring. Mirroring is discussed in more detail elsewhereherein.

For the system described herein, file objects are accessed by one of theclients 104-106 by first requesting, and obtaining, a lease from theservers 102. The lease corresponds to the file objects for theparticular file being accessed and to the type of access. A lease may befor reading, writing, and/or more some other operation (e.g., changingfile attributes). In an embodiment herein, for objects corresponding toany particular file, the servers 102 may issue only one write lease at atime to any of the clients 104-106 but may issue multiple read leasessimultaneously and may issue read lease(s) at the same time as issuing awrite lease. However, in some embodiments it may be possible to obtain alease for a specified logical range of a file for operations only onthat range. Thus, for example, it may be possible for a first client toobtain lease for writing to a first logical range of a file while asecond client may, independently, obtain a lease for writing to a secondand separate logical range of the same file. The two write leases fordifferent logical ranges may overlap in time without violating thegeneral rule that the system never issues overlapping write leases forthe same data.

The lease provided to the clients 104-106 from the servers 102 includessecurity information (security token) that allows the client appropriateaccess to the data. The security token may expire after a certain amountof time. In an embodiment herein, a client accesses data by providing anappropriate security token for the data as well as clientusers/ownership information. Thus, for example, a user wishing to accessdata would first obtain a lease and then would provide the accessrequest to the servers 102 along with the security token and informationidentifying the owner (client) accessing the data. The servers 102 wouldthen determine whether the access requested by the client waspermissible. After the lease expires (the security token expires), theuser requests the lease again. Data security may be implemented usingconventional data security mechanisms.

After obtaining a lease for accessing a file, a client may then cachethe corresponding metadata, including the LSO tree, into local storageof the client. The client may then use and manipulate the local cachedversion of the metadata and may use the metadata to obtain access to thedata. As described in more detail elsewhere herein, a client does notdirectly modify metadata stored by the servers 102 but, instead, sendsupdate messages to the servers 102 to signal that metadata for a filemay need to be modified by the servers 102.

Referring to FIG. 9, a flowchart 200 illustrates steps performed by aclient in connection with requesting a lease for a file (objectsassociated with a file) for performing operations thereon. Processingbegins at a first step 202 where the client requests the lease for thefile. As discussed in more detail elsewhere herein, a client requestinga lease includes specifying the type of access (e.g., read, write,etc.). Following the step 202 is a test step 204 where it is determinedif the request has been granted. If not, then control transfers from thetest step 204 to a step 206 where processing is performed in connectionwith the lease not being granted to the client. The particularprocessing performed at the step 206 may include, for example, providingan error message to the client process requesting access to the filecorresponding to the lease and/or waiting for an amount of time and thenretrying the request. Note that it is possible that a lease for aparticular file is not available at one time is subsequently availableat another time because, for example, the lease is released by anotherclient in between the first request and the second request. In anyevent, any appropriate processing may be performed at the step 206.Following the step 206, processing is complete.

If it is determined at the test step 204 that the least requested at thestep 202 has been granted, then control transfers from the test step 204to a step 208 where the client performs an operation using the file forwhich the lease was granted. Operations performed at the step 208include reading data and/or writing data. Different types of processingthat may be performed at the step 208 are described in more detailelsewhere herein.

Following the step 208 is a test step 212 where it is determined if theoperations performed at the step 208 require an update. In someinstances, a client may obtain a lease and perform operations that donot affect the file or the underlying file objects. For example, aclient may acquire a lease for reading a file and the operationperformed at the step 208 may include the client reading the file. Insuch a case, no update may be necessary since the file and correspondingfile objects (metadata, data objects, etc.) have not changed. On theother hand, if the client obtains a lease for writing data the file andthe operation performed at the step 208 includes writing data to thefile, then the underlying file objects will have been changed and anupdate message needs to be sent the servers 102. If it is determined atthe test step 212 that an update is necessary, then control passes fromthe test step 212 to a step 214 where an update message is sent by theclient to the servers 102.

Following the step 214, or following the step 212 if no update isnecessary, control passes to a test step 216 where it is determined ifthe client is finished with the file. In some instances, the client mayperform a small number of operations on the file, after which the clientwould be finished with the file at the step 216. In other cases, theclient may be performing a series of operations and may not yet havecompleted all of the operations.

If it is determined at the test step 216 that the client is not finishedwith the file, then control passes from the test step 216 to a test step218 where it is determined if the lease for the file has expired. Notethat a lease may be provided by the servers 102 to the client with aparticular expiration time and/or the associated security token mayexpire. In addition, it may be possible for the servers 102 to recallleases provided to clients under certain circumstances. In either case,the lease may no longer be valid. Accordingly, if it is determined atthe step 218 that the lease has expired (and/or has been recalled by theservers 102), then control passes from the test step 218 back to thestep 202 request the lease again. Otherwise, if the lease has notexpired, then control passes from the test step 218 back to the step 208to perform another iteration.

If it is determined at the test step 216 that the client is finishedwith the file, then control passes from the test step 216 to a step 222where the client releases the lease by sending a message to the servers102 indicating that the client no longer needs the lease. Once theclient releases the lease, it may be available for other clients.Following the step 222, processing is complete.

In an embodiment herein, data file objects may be indicated as havingone of four possible states: current, stale, immutable, or empty. Thecurrent state indicates that the data object is up to date and current.The stale state indicates that the data is not valid but, instead,requires updating, perhaps by some other process. In some instances, thestale state may be used only in connection with mirror copies of data(explained in more detail elsewhere herein). Data may be stale becauseit is a mirror of other data that was recently written but not yetcopied. The immutable state indicates that the corresponding data iswrite protected, perhaps in connection with a previous clone (snapshot)operation. The empty state indicates that no actual storage space hasyet been allocated for the data.

Referring to FIG. 10, a flow chart 240 illustrates steps performed by aclient in connection with performing read operations after obtaining aread lease for a file. Processing begins at a first test step 242 whereit is determined if the data object being read is in the current state.If not, then control transfers from the test step 242 to a step 244where it is determined if the data object being read is in the immutablestate. If it is determined at the step 244 that the data object beingread is in the immutable state or if it is determined at the test step242 that the data object being read is in the current state, thencontrol transfers to a step 246 where the read operation is performed. Aclient reads file data by providing the appropriate data file objectidentifier to the servers 102 as well as providing appropriate securitycredentials. Accordingly, the read operation performed at the step 246includes the client sending an appropriate request to the servers 102and waiting for a result therefrom.

Following the step 246 is a test step 248 where it is determined if theservers 102 have returned a result indicating that the data file objectis unavailable. In some cases, a data file object that is otherwisecurrent or immutable may nevertheless become unavailable. For example,the physical storage space that holds the data file object may becometemporarily disconnected and/or temporarily busy doing some otheroperation. If it is determined at the test step 248 that the data fileobject is available, then control transfers from the test step 248 to atest step 252 where it is determined if the read operation wassuccessful. If so, then control transfers from the test step 252 to astep 254 where the result of the read operation is returned to theprocess at the client that caused the read operation to be performed.The result may include the data that was read and a status indicator.Following the step 254, processing is complete.

If it is determined at the test step 252 that the read operationperformed at the step 246 was not successful, then control transfersfrom the test step 252 to a step 256 where error processing isperformed. The particular error processing performed at the step 256 isimplementation dependent and may include, for example, reporting theerror to a calling process and/or possibly retrying the read operation aspecified number of times. Following the step 256, processing iscomplete.

If it is determined at the test step 244 that the data object being readis not in the immutable state, then control transfers from the test step244 to a test step 258 where it is determined if the data object is inthe stale state. If not, then, by virtue of the test steps 242, 244, 258and process of elimination, the data object is in the empty state. In anembodiment herein, reading a data object in the empty state causes zerosto be returned to the calling process. Accordingly, if it is determinedat the test step 258 that the data object is not in the stale state,then control transfers from the test step 258 to a step 262 where zerosare returned in response to the read operation. Following the step 262,processing is complete.

If it is determined at the test step 258 that the data file object is inthe stale state, or if it is determined at the test step 248 that thedata file object is not available, then control transfers to a test step264 to determine if an alternative version of the data file object isavailable for reading. As discussed in more detail elsewhere herein,there may be multiple versions of the same data file objects that existat the same time due to mirroring. Accordingly, if the data file objectbeing read is in the stale state or otherwise unavailable, it may bepossible to read a mirror copy of the data file object that may be inthe current state. The test performed at the step 264 is described inmore detail elsewhere herein.

If it is determined at the test step 264 that an alternative version ofthe data file object is available, then control transfers from the teststep 264 to a step 266 where the alternative version of the data fileobject is selected for use. Following the step 266, control transfersback to the test step 242 for another iteration with the alternativedata file object.

If it is determined at the test step 264 that an alternative version ofthe data file object is not available, then control transfers from thetest step 264 to a step 268 where the client process waits. In anembodiment herein, it may be desirable to wait for a data file object tobecome current and/or available. Following the step 268, controltransfers back to the step 242 for another iteration. Note that, insteadof waiting at the step 268, processing may proceed from the step 264 tothe step 256 to perform error processing if there is no alternative datafile object available. In other embodiments, it may be possible toperform the step 268 a certain number of times and then, if the datafile object is still unavailable or in the stale state and there is noalternative data file object, then perform the error processing at thestep 256.

Referring to FIG. 11, a flow chart 280 illustrates steps performed by aclient in connection with performing write operations after obtaining awrite lease for a file. Processing begins at a first test step 282 whereit is determined if the data file object to which the write is beingperformed is in the immutable state. If so, then control transfers fromthe step 282 to a step 284 where new actual storage space is allocatedfor the data file object to avoid overwriting the immutable data.Allocating new storage space for a data object may include providing anappropriate request to the servers 102. Following the step 284, controltransfers back to the step 282 to begin the processing for the writeoperation again.

If it is determined at the step 282 that the data file object to whichthe write is being performed is not in the immutable state, then controltransfers from the step 282 to a step 286 where it is determined if thedata file object to which the write is being performed is in the stalestate. If not, then control transfers from the test step 286 to a teststep 288 where it is determined if the data file object to which thewrite is being performed is in the empty state. If so, then controltransfers from the step 288 to the step 284, discussed above, where newphysical storage space is allocated. Following the step 284, controltransfers back to the step 282 to begin the processing for the writeoperation again.

If it is determined at the step 288 that the data file object to whichthe write is being performed is not in the empty state, then controltransfers from the test step 288 to a step 292 where the write operationis performed. Note that the step 292 is reached if the data file objectto which the write operation is being performed is not in the immutablestate, not in the stale state, and not in the empty state (and thus isin the current state). A client writes file data by providing theappropriate data file object location identifier to the servers 102 aswell as providing appropriate security credentials. Accordingly, thewrite operation performed at the step 292 includes the client sending anappropriate request to the servers 102 and waiting for a resulttherefrom.

Following the step 292 is a test step 294 where it is determined if thewrite operation performed at the step 292 was successful. If so, thencontrol transfers from the test step 294 to a test step 296 where it isdetermined if there are synchronous mirrors of the data file object towhich the write is being performed. The test performed at the step 296may include, for example, determining if a parent node of the data fileobject in the file LSO tree indicates replication. If not, then controltransfers from the test step 296 to a step 298 where an update (message)is sent to the servers 102 indicating that the write had been performed.Following the step 298, processing is complete.

If it is determined at the test step 296 that there are synchronousmirrors of the data file object to which the write is being performed,then control passes from the test step 296 to a step 302 where the datathat was written at the step 292 is also written to the synchronousmirror(s). The processing performed at the step 302 is discussed in moredetail elsewhere herein. Following the step 302, control transfers tothe step 298, discussed above, where an update (message) is sent to theservers 102. Following the step 298, processing is complete.

If it is determined at the test step 294 that the write operationperformed at the step 292 was not successful, or if it is determined atthe test step 286 that the data file object to which the write operationis being performed is in the stale state, then control transfers to astep 304 where the data file object to which the write is attempting tobe performed is removed from the client's local copy of the LSO tree. Atthe end of the write operation illustrated by the flow chart 280, theclient may inform the servers 102 (at the step 298) of the difficulty inwriting to the data object so that the servers 102 can take appropriateaction, if necessary.

Following the step 304 is a test step 306 where it is determined if analternative version of the data is available. As discussed in moredetail elsewhere herein, there may be multiple versions of the same datafile objects that exist at the same time due to mirroring. Accordingly,if the data file object to which the write operation is being performedis stale or otherwise cannot be written to, it may be possible to writeto a mirror copy of the data. The test performed at the step 306 is likethe test performed at the step 264 and is described in more detailelsewhere herein. If it is determined at the test step 306 that analternative version of the data corresponding to the data file object isavailable, then control transfers from the test step 306 to a step 308where the alternative version is selected for writing. Following thestep 308, control transfers back to the test step 282 for anotheriteration with the alternative data fire object.

If it is determined at the test step 306 that an alternative version ofthe data corresponding to the data file object is not available, thencontrol transfers from the test step 306 to a step 312 to perform errorprocessing if there is no alternative available. The particular errorprocessing performed at the step 312 is implementation dependent and mayinclude, for example, reporting the error to a calling process and/orpossibly retrying the write operation a specified number of times beforereporting the error. Following the step 312, control transfers to thestep 298, discussed above, to send update information to the servers102. Following the step 298, processing is complete.

Referring to FIG. 12, a flow chart 320 illustrates in more detail stepsperformed in connection with the alternative available test step 264 ofFIG. 10 and/or the alternative available test step 306 of FIG. 11.Processing begins at a first test step 322 where it is determined if thefile has any mirror data file objects at all. In some instances, a filemay not use mirrors, in which case there would be no alternative copyavailable. Accordingly, if it is determined at the test step 322 thatthe file does not have any mirror data file objects, then controltransfers from the test step 322 to a step 324 where a value is returnedindicating that no alternative copies are available. Following the step324, processing is complete.

If it is determined at the test step 322 that mirror copies areavailable, then control transfers from the test step 322 to a step 326where a pointer is made to point to a first mirror data file object. Forthe processing discussed herein, a pointer may be used to iteratethrough mirror data file objects to find a useable data file object.Following the step 326 is a test step 328 where it is determined if thepointer is past the end of the list of mirror data file objects (hasiterated through all of the mirror data file objects). If so, thencontrol passes from the test step 328 to the step 324, discussed above,to return a value that indicates that no alternatives are available.

If it is determined at the test step 328 that the pointer is not pastthe end of a list of mirror data file objects, then control transfersfrom the test step 328 to a test step 332 where it is determined if thepointer points to a data file object in a stale state. If so, thencontrol transfers from the test step 332 to a step 334 where the pointeris made to point to the next data file object to be examined. Followingthe step 334, control transfers back to the step 328, discussed above,for another iteration. If it is determined at the test step 332 that thepointer does not point to a data file object in the stale state, thencontrol transfers from the test step 332 to a step 336 where the datafile object that is pointed to by the pointer is returned as analternative data file object that may be used by the calling process.Following the step 336, processing is complete.

Referring to FIG. 13, a flow chart 350 illustrates in more detailoperations performed in connection with the step 302 of the flow chart280 of FIG. 11 where data that has been written is copied to a number ofsynchronous mirrors (mirror data file objects). Processing begins at afirst step 352 where a pointer that is used to iterate through themirror data file objects is set to point the first one of the mirrordata file objects. Following the step 352 is a test step 354 where it isdetermined if the pointer used for iterating through the mirror datafile objects points past the end (i.e., if all of the mirror data fileobjects have been processed). If so, then processing is complete.Otherwise, control transfers from the test step 354 to a test step 356where it is determined if the status of the mirror data file objectpointed to by the pointer indicates that the mirror data file object iscurrent. If not, then control passes from the test step 356 to a teststep 358 where it is determined if the status of the mirror data fileobject pointed to by the pointer indicates that the mirror data fileobject is in the stale state. If so, then control passes from the teststep 358 to a step 362 where the mirror data file object is removed fromthe client's local copy of the LSO tree. In an embodiment herein, asynchronous mirror data file object should not be in a stale state and,if that occurs, it may indicate an error condition. Accordingly,following the step 362 is a step 364 where information about the stalemirror is sent to the servers 102, which may perform recovery processingin response thereto.

Note that if a mirror data file object is neither in the stale state norin the current state, then the mirror data file object is either in theempty state or in the immutable state. In either case, it may benecessary to allocate new space for a data file object to which the datais to be written. Accordingly, if it is determined at the test step 358that the data file object is not in the stale state, then control passesfrom the test step 358 to a step 366 where new space is allocated forthe mirror data file object. Following the step 366 is a step 368 wherethe data that is being copied across synchronous mirror data fileobjects is written to the mirror data file object pointed to by thepointer used to iterate through the mirror data file objects. Note thatthe step 368 may also be reached from the test step 356 if it isdetermined that the mirror data file object is current. Following thestep 368 is a step 372 where the pointer used to iterate through themirror data file objects is made to point to the next one. Note that thestep 372 is also reached following the step 364. Following the step 372,control transfers back to the test step 354 for another iteration.

The system described herein may access file objects using objectidentifiers. In an embodiment herein, each file object that is storedamong the servers 102 may be assigned a unique object identifier thatidentifies each file object and distinguishes each file object fromother file objects in the system. However, many applications use a filenaming structure and/or a hierarchical directory to access files anddata therein. For example, a file name “C:\ABC\DEF\GHI.doc” indicates afile called “GHI.doc” stored in a sub-directory “DEF” that is stored inanother directory “ABC” located on a root volume “C”. A nested directorystructure may be provided by implementing directories as special filesthat are stored in other directories. In the example given above, thesub-directory “DEF” may be implemented as a file stored in the directory“ABC”.

The system described herein may present to applications a conventionalnaming structure and directory hierarchy by translating conventionalfile names into file object identifiers. Such a translation service maybe used by other services in connection with file operations. In anembodiment herein, each directory may include a table that correlatesfile names and sub-directory names with file object identifiers. Thesystem may examine one directory at a time and traverse sub-directoriesuntil a target file is reached.

Referring to FIG. 14, a flow chart 380 illustrates steps performed inconnection with providing a file name translation service (file nameservice) that translates a conventional hierarchical file name into afile object identifier. The file name service may receive a conventionalhierarchical file name as an input and may return an object identifier(or, in some cases, an error). Processing begins at a first step 382where the file name service receives a file name, such as a conventionalhierarchical file name. Following the step 382 is a test step 384 whereit is determined if the syntax of the file name is OK. Checking thesyntax of a hierarchical file name is know and includes, for example,checking that only appropriate characters have been used. If it isdetermined at the test step 384 that the syntax is not OK, then controltransfers from the test step 384 to a step 386 where an error indicator(error message) is returned to the calling process. Following the step386, processing is complete.

If it is determined at the test step 384 that the syntax of the providedname is OK, then control transfers from the test step 384 to a step 388where the root directory is read. In an embodiment herein, all file namepaths begin at a single common root directory used for all file objectsstored in the servers 102. In other embodiments, there may be multipleroot directories where specification of a particular root directory maybe provided by any appropriate means, such as using a volume identifier,specifically selecting a particular root directory, etc.

Following the step 388 is a test step 392 where it is determined if thetarget file (or sub-directory that is part of the file name path) is inthe directory that has been read. If not, then control passes from thetest step 392 to the step 386, discussed above, where an error isreturned. In some embodiments, the file-not-found error that resultsfrom the test at the step 392 may be different from the syntax errorthat results from the test at the step 384.

If it is determined that the target file or a sub-directory that is partof the file name path is in the directory that has just been read, thencontrol passes from the test step 392 to a test step 394 where it isdetermined if the directory that has just been read contains the targetfile (as opposed to containing a sub-directory that is part of the filename path). If so, then control passes from the test step 394 to a step396 where the object identifier of the target file object is returned tothe calling process. Following the step 396, processing is complete.

If it is determined at the test step 394 that the directory that hasjust been read contains a sub-directory that is part of the file namepath, then control transfers from the test step 394 to a step 398 wherethe sub-directory is read so that the sub-directory becomes thedirectory being examined. In effect, processing at the step 398traverses the chain of subdirectories to eventually get to the targetfile. Following the step 398, control transfers back to the step 392,discussed above, for a next iteration.

Referring to FIG. 15, a diagram shows the client 104 as including useraddress memory space and kernel address memory space. In an embodimentherein, user address memory space is memory space that is generally usedby user applications and related processes while kernel address memoryspace is memory space that is generally accessible only by systemprocesses, such as an operating system kernel and related processes. Asdiscussed in more detail herein, it is possible to have differentportions of the system described herein reside and operate in the usermemory space and/or the kernel memory space. In addition, it is possiblefor the client 104 to have multiple different interfaces to access fileobjects at the servers.

In FIG. 15, the client 104 is shown as including an application in theuser memory address space and a virtual file system (VFS), file nameservices, kernel I/O drivers, a layout manager, and a communicationinterface in the kernel memory address space. The VFS is an abstractionlayer on top of a more concrete file system. The purpose of a VFS is toallow client applications to access different types of concrete filesystems in a uniform way. The VFS allows the application running on theclient 104 to access file objects on the servers 102 without theapplication needing to understand the details of the underlying filesystem. The VFS may be implemented in a conventional fashion bytranslating file system calls by the application into file objectmanipulations and vice versa. For example, the VFS may translate filesystem calls such as open, read, write, close, etc. into file objectcalls such as create object, delete object, etc.

The VFS may use the file name services, described elsewhere herein, totranslate file names into object identifiers. The kernel I/O driversprovide an interface to low-level object level I/O operations. Thekernel I/O drivers may be modeled after, and be similar to, Linux I/Odrivers. The layout manager may perform some of the processing on LSOtrees corresponding to files, as discussed in more detail elsewhereherein. The communication interface provides communication between theclient 104 and the servers 102. The communication interface may beimplemented using any appropriate communication mechanism. For example,if the client 104 communicates with the servers 102 via an Internetconnection, then the communication interface may use TCP/IP tofacilitate communication between the servers 102 and the client 104.

The application of FIG. 15 may correspond to the client software 124 ofFIG. 3. The VFS of FIG. 15 may correspond to one of the interfaces126-128 of FIG. 3. The file name services, kernel I/O drivers, layoutmanager, and communication interface of FIG. 15 may correspond to theserver operations software 122 of FIG. 3. Similar correlation betweencomponents of FIG. 3 and other figures may also be found.

Referring to FIG. 16, a flow chart 410 illustrates steps performed by aVFS to provide file services in connection with an application runningon the client 104. Processing begins at a first step 412 where a filesystem operation requested by an application may be translated into oneor more object operations. For example, a file operation to open a filefor reading may be converted to object operations that include obtainingan object lease for reading as discussed elsewhere herein. Following thestep 412 is a step 414 where the VFS translates the file name into anobject identifiers using the file name services discussed above inconnection with FIG. 14. Operations that follow may be performed usingthe object identifiers obtained at the step 414.

Following the step 414 is a test step 416 where it is determined if therequested operation requires the LSO tree. As discussed elsewhereherein, operations such as read, write, etc. use LSO trees correspondingto file objects. However, some possible file operations may not requireaccessing a corresponding LSO tree. If it is determined at the test step416 that the LSO tree is needed, then control transfers from the teststep 416 to a step 418 where the VFS accesses the LSO manager to performthe necessary operations. For example, for a read operation, the LSOmanager may perform processing like that illustrated in the flow chart240 of FIG. 10. Following the step 418, or following the step 416 if theLSO is not needed, is a step 422 where the operations are passed to lowlevel kernel I/O drivers (e.g., via one or more appropriate API's). Thekernel I/O drivers use the communication module to communicate betweenthe client 104 and the servers 102 in connection with performing therequested operation(s). In instances where the application running onthe client 104 has requested data and/or other information from theservers 102, the data and/or information may be passed back up throughthe communication interface, kernel I/O drivers, etc. to the VFS andultimately to the application.

Referring to FIG. 17, the client 104 is shown as having an application,file name services, user level I/O drivers, and a layout manager allprovided in user memory address space. The functionality of the VFS thatwas shown in FIG. 15 and described above may be performed instead bylibrary routines linked to the application, and thus are part of theapplication. These routines would provide functionality like thatdiscussed above in connection with FIG. 16. Accordingly, it is theapplication that uses the file name services and makes calls to the userlevel I/O drivers (like the kernel I/O drivers) and to the layoutmanager. The communication interface is still maintained in the kernelmemory address space.

Note that, for the configuration of FIG. 15, modifications are providedby modifying system processes (the operating system), which isdisadvantageous for a number of reasons. For example, if the client 104is a multiuser computing system, then modifying the operating system mayinvolve restarting the entire system and thus disrupting all of theusers. In contrast, the configuration of FIG. 17 is advantageous sinceit allows modification of the system in the application/user memoryaddress space so that the operating system of the client 104 does notneed to be modified. However, the configuration of FIG. 17 does not usea VFS, and thus does not obtain the advantageous separation of theapplication from the file system that is provided by the VFS in FIG. 15.

Referring to FIG. 18, the client 104 is shown as having an applicationin user memory address space that accesses file objects through a VFS inkernel memory address space like that illustrated in FIG. 15. However,the file name services, I/O drivers, and the layout manager all residein the user memory address space like the system illustrated in FIG. 17.The VFS communicates with components in the user memory address spacethrough a bridge between kernel memory address space and user memoryaddress space, such as a FUSE (or similar) interface. The bridge allowsfile system components to be provided in user memory space instead ofkernel address memory space while still preserving the VFS in the kerneladdress memory space. Thus, the configuration illustrated by FIG. 18provides the advantages of using a VFS, as illustrated in theconfiguration of FIG. 15, along with the advantages of having filesystem components in the user address memory space, as illustrated inthe configuration of FIG. 17.

It is possible in some instances to have applications and/or otherprocessing in the user memory address space of the client 104 accessfile objects directly, rather than through a file services layer likethe VFS and/or equivalent functionality provided by user linkablelibraries (e.g., the configuration illustrated in FIG. 17). Accessingfile objects directly may include invoking routines that create objects,read objects, modify objects, delete objects, etc. In such a case, theapplication would need to know how to interpret and/or manipulate theobject data, which may not always be desirable. For example, anapplication that accesses file objects through the VFS may not need totake into account (or even know about) the structure of an LSO treewhile an application that accesses objects directly may need to use theLSO tree. On the other hand, removing the file services layer mayprovide an opportunity for optimizations not otherwise available. Notethat, since the servers 102 exchange object information/operations withthe clients 104-106, the servers 102 may not need to distinguish or beable to distinguish between application on the clients 104-106 using afile system interface (file services like the VFS) and those that arenot.

Referring to FIG. 19, the client 104 is shown as including anapplication in the user memory address space and kernel I/O drivers, alayout manager, and file name services in the kernel memory addressspace. The configuration illustrated in FIG. 19 is like that illustratedin FIG. 15, except that the VFS is not used. In the configurationillustrated in FIG. 19, the application could directly access the filename services, the kernel I/O drivers, and the layout manager. Thecommunication interface in the kernel memory address space communicateswith the servers 102 just as in other configurations. The direct accessillustrated in FIG. 19 allows applications to manipulate file objects(via, for example, appropriate API's) while access via the VFS (orsimilar) allows applications to accesses file objects indirectly throughfile system calls to the VFS.

Referring to FIG. 20, the client 104 is shown as having an application,user level I/O drivers, a layout manager, and file name services allprovided in user memory address space. The configuration shown in FIG.20 is like that shown in FIG. 17. However, as set forth above, theconfiguration of FIG. 17 includes file service libraries that are linkedinto, and thus part of, the application. In contrast, in theconfiguration of FIG. 20, the application is not linked into librarieswith extensive file services. Instead, like the application of theconfiguration illustrated in FIG. 19, the application in theconfiguration of FIG. 20 uses minimal file services and, instead, usesand operates upon file objects directly using the user level I/Odrivers, the layout manager and, if a file name translation is needed,the file name services.

Referring to FIG. 21, the client 104 is shown as having an applicationin user memory address space and a bridge in the kernel memory addressspace. File name services, user level I/O drivers, and a layout managerare provided in user memory address space. However, unlike theconfiguration of FIG. 20, the application does not make direct calls tothe file system components in the user memory address space. Instead,the application calls the file system components indirectly through thebridge. Just as with the configuration illustrated in FIG. 18, theconfiguration of FIG. 21 advantageously locates file system componentsin the user memory address space and, at the same time, provides akernel memory address space layer between the application and the filesystem components.

Referring to FIG. 22, the client 104 is shown as having an applicationin user memory address space and a Web Services module in kernel memoryaddress space. The application may be a Web server application or anyapplication that handles communication with the Web. In an embodimentherein, the application allows communication with the client 104, whichacts as a Web server to other computing devices (not shown) that accessthe client 104 through a Web connection.

The configuration illustrated in FIG. 22 provides Web Services in amanner similar to the file services and/or file object access providedby other configurations. However, the Web Services receivesrequests/data via a Web data protocol, such as HTML, and providesresponses/data also in a Web data protocol, which may be the same ordifferent from the protocol used for requests/data. Operations handledby the Web Services may include object-level operations such as createobject, delete object, read object, modify object, modify objectmetadata, etc. It is also possible to provide more file system leveloperations, via the Web Services, that open files, read data from files,etc. by including at least some of the functionality of the fileservices, described elsewhere herein, with the Web Services. The WebServices may present to the other computing devices a conventionalwell-known Web Services protocol, such as REST or SOAP, or may provideany other appropriate protocol.

Referring to FIG. 23, the client 104 is shown as having an application,Web Services, user level I/O drivers, and a layout manager in usermemory address space. The application may include a Web connection thatallows communication with the client 104, which acts as a Web server toother computing devices (not shown) that access the client 104 throughthe Web connection. The configuration of FIG. 23 is like that of FIG. 17and FIG. 20. The advantages of the configuration shown in FIG. 23 overthe configuration shown in FIG. 22 is that, generally, changes to theconfiguration shown in FIG. 23 do not require reconfiguring kernelmemory address space processes.

Referring to FIG. 24, the 104 is shown as having an application, WebServices, user level I/O drivers, and a layout manager in user memoryaddress space. The application may include a Web connection that allowscommunication with the client 104, which acts as a Web server to othercomputing devices (not shown) that access the client 104 through the Webconnection. A bridge is provided in the kernel memory address space. Theconfiguration of FIG. 24 has similar advantages to the configurationshown in FIG. 23, but also has the advantages provided by providing thebridge, discussed elsewhere herein.

Referring to FIG. 25, the client 104 is shown as having a plurality ofapplications in user memory address space, each of which may use adifferent interface to access file objects of the servers 102. Each ofthe applications shown in FIG. 25 is meant to represent one or moreapplications. Accordingly, APP1 may present one or more applicationsthat access file objects at the servers 102 using a Web Servicesinterface. The APP1 application may include a Web connection that allowscommunication with the client 104, which acts as a Web server to othercomputing devices (not shown) that access the client 104 through the Webconnection. APP2 may represent one or more applications that access fileobjects at the servers 102 using the VFS, and APP3 may represent one ormore applications that directly operate on file objects at the servers102. The different interfaces may operate at the client 104 at the sametime.

Note that may other combinations of configurations, includingillustrated configurations, are possible so that the client 104 maysimultaneously present to applications thereon different interfaces. Forexample, it is possible to combine the configurations illustrated inFIGS. 15, 19, and 22 and/or combine the configurations of FIGS. 17, 20,and 23. Other combinations, including combinations of only twoillustrated configurations, are also possible. The servers 102 providethe file objects to the clients 104 provided: 1) the requesting clienthas appropriate authorization for whatever operation is requested forthe file objects; and 2) there is no conflict with any previous request.For example, in systems where only one client is allowed to write to anobject at any one time, the servers 102 would not allow one of theclients 104-106 to modify a particular object while another one of theclients 104-106 is also modifying the object.

The system described herein may be used with any server, or any group ofservers, capable of providing file objects to clients. The particularform of the file objects may vary without departing from the spirit andscope of the invention. In some instances, the order of steps in theflow charts may be modified, where appropriate. The system describedherein may be implemented using a computer program product/softwareprovided in a computer-readable storage medium.

While the invention has been disclosed in connection with variousembodiments, modifications thereon will be readily apparent to thoseskilled in the art. Accordingly, the spirit and scope of the inventionis set forth in the following claims.

1.-22. (canceled)
 23. A method of managing objects for a data file,comprising: obtaining a metadata object for the file; determining if themetadata object indicates that a portion of the data file includessynchronous mirrors; and in response to a write of new data to the datafile, writing the new data to each synchronous mirror.
 24. A method,according to claim 23, wherein data objects of a data file may be in oneof four states: current, stale, empty, and immutable.
 25. A method,according to claim 24, wherein, in response to a read operation and thecorresponding data object being in a stale state, data is read for acorresponding synchronous mirror that is in a current state.
 26. Amethod, according to claim 23, wherein the metadata is provided througha Web Services interface that includes at least one of: a SOAP interfaceand a REST interface.
 27. A method, according to claim 23, wherein themetadata is provided through a direct file object interface that allowsan application to directly access file objects at the same time thatfile objects are being accessed using at least one other interface. 28.A method, according to claim 23, further comprising: providing file nameservices that translate file names into file object identifiers, whereinthe file name services are accessed by at least one of: a file systeminterface and a Web Services interface.
 29. Computer software, providedin a computer-readable medium, that manages objects for a data file, thesoftware comprising: executable code that obtains a metadata object forthe file; executable code that determines if the metadata objectindicates that a portion of the data file includes synchronous mirrors;and executable code that writes the new data to each synchronous mirrorin response to a write of new data to the data file.
 30. Computersoftware, according to claim 29, wherein data objects of a data file maybe in one of four states: current, stale, empty, and immutable. 31.Computer software, according to claim 30, wherein, in response to a readoperation and the corresponding data object being in a stale state,executable code causes data to be read for a corresponding synchronousmirror that is in a current state.
 32. Computer software, according toclaim 29, wherein the metadata is provided through a Web Servicesinterface that includes at least one of: a SOAP interface and a RESTinterface.
 33. Computer software, according to claim 29, wherein themetadata is provided through a direct file object interface that allowsan application to directly access file objects at the same time thatfile objects are being accessed using at least one other interface. 34.Computer software, according to claim 29, further comprising: executablecode that provides file name services that translate file names intofile object identifiers, wherein the file name services are accessed byat least one of: a file system interface and a Web Services interface.